﻿using CSharpTestProject.Utils;
using System;
using System.Data;
using System.Drawing;
using System.Windows.Forms;

namespace CSharpTestProject
{
    public partial class LoginForm : Form
    {
        private const int CODECOUNT = 4; // 验证码字符长度
        private string code;             // 验证码
        private _Sql sql;                // 数据库链接对象
        public LoginForm()
        {
            InitializeComponent();
        }
        private void CreateCode()
        {
            string code = CheckCode.CreateRandomCode(CODECOUNT);
            this.code = code;
            Image image = CheckCode.CreateImage(code);
            pictureBox1.Image = image;
        }
        /*
         * 加载完成需要完成：
         * （1） 加载验证码
         * （2） 默认勾选教师
         * （3） 读取上次保存的用户名和密码
         * （4） 连接数据库
         */
        private void Form1_Load(object sender, EventArgs e)
        {
            // 默认勾选登录身份
            radioButton1.Checked = true;
            // 生成验证码
            CreateCode();
            // 读取上次保存的用户名和密码
            string[] s = Utils.Utils.FindAccount();
            if (s != null)
            {
                textBox1.Text = s[0];
                textBox2.Text = s[1];
                string t = s[2];
                if (s[2] == "0")
                {
                    radioButton1.Checked = true;
                }
                else
                {
                    radioButton2.Checked = true;
                }
                // 如果有保存密码，则也勾选上保存密码，否则不勾选
                if (textBox1.Text != "" && textBox2.Text != "")
                    checkBox1.Checked = true;
            }
            // 链接数据库
            _Sql sql = new _Sql();
            try
            {
                sql.SqlConnect();
                this.sql = sql;
            } catch {
                MessageBox.Show("数据库链接失败！");
            }
            textBox3.Text = code;
        }
        //重置功能
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
            radioButton1.Checked = true;
            CreateCode();
        }
        // 点击验证码刷新
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            CreateCode();
        }
        /*
         * 登录功能
         * 检查验证码是否正确
         * 通过数据库查询用户名对应的密码，并检查密码是否正确
         * 如果密码正确，则进入对应身份的界面
         * 如果勾选了记住密码，则保存密码到对应文件
         * 如果密码错误，则提示并更换验证码
         */
        private void button1_Click(object sender, EventArgs e)
        {
            // 判断各文本框是否为空
            if (textBox1.Text == "")
            {
                MessageBox.Show("用户名不能为空！");
                return;
            } 
            else if (textBox2.Text == "")
            {
                MessageBox.Show("密码不能为空！");
                return;
            } 
            else if (textBox3.Text == "")
            {
                MessageBox.Show("验证码不能为空！");
                return;
            }
            // 检查验证码是否输入正确
            if (textBox3.Text.ToLower() != code.ToLower())
            {
                MessageBox.Show("验证码输入错误！");
                CreateCode();
                return;
            }
            string identify = radioButton1.Checked ? "teacher" : "gly";
            // 通过数据库查询用户名对应的密码，并检查密码是否正确
            string sqlString = $"SELECT DISTINCT * FROM usertable WHERE logname='{textBox1.Text}' and yhlx='{identify}'";
            DataSet user = sql.SqlFind(sqlString);
            string password = null;
            try
            {
                password = user.Tables[0].Rows[0][2].ToString();
            }
            catch
            {
                MessageBox.Show("用户不存在！");
                return;
            }
            // 密码正确
            if (textBox2.Text == password) 
            {
                
                // 记住密码选项
                if (checkBox1.Checked)
                {
                    Utils.Utils.RememberAccount(textBox1.Text, textBox2.Text,radioButton1.Checked);
                } else
                {
                    Utils.Utils.RememberAccount("", "",false);
                }

                // 对应身份进入对应页面
                Hide();
                sql.SqlClose();
                if (radioButton1.Checked)
                {
                    // 查看教师姓名
                    sqlString = $"SELECT teachername from teachers WHERE logname='{textBox1.Text}'";
                    DataSet data = null;
                    try
                    {
                        data = sql.SqlFind(sqlString);
                    } catch {
                        MessageBox.Show("数据库出错！");
                        return;
                    }
                        TeacherForm teacherFrom = new TeacherForm();
                    teacherFrom.TeacherName = data.Tables[0].Rows[0][0].ToString();
                    teacherFrom.ShowDialog();
                }
                else
                {
                    AdminForm adminForm = new AdminForm();
                    adminForm.ShowDialog();
                }
                Close();
            }
            // 密码错误
            else
            {
                MessageBox.Show("用户名或密码错误！");
                CreateCode();
            }

        }
    }
}
